class Timer {
  /**
   * 倒计时方法
   * @param  number end    截止时间
   * @param  function update 每次更新时间时的回调函数
   * @param  function handle 倒计时结束时的回调函数
   * @return 
   */
   countdown (end, update, handle) {
    const now = new Date().getTime();
    const self = this;
    if ( now - end > 0) {
      handle.call(self);
    } else {
      let last_time = end - now;
      // 1000 => 毫秒 ； 60 => 秒 ； 60 => 分钟； 24 => 小时
      const px_d = 1000*60*60*24; 
      const px_h = 1000*60*60;
      const px_m = 1000*60;
      const px_S = 1000;
      let d = Math.floor(last_time / px_d);
      let h = Math.floor((last_time - d * px_d) / px_h);
      let m = Math.floor((last_time - d * px_d - h * px_h) / px_h );
      let s = Math.floor((last_time - d * px_d - h * px_h - m* px_m) / px_h);
      let r = [];

      if (d > 0) {
        r.push(`<em>${d}</em>天`);
      }

      if (r.length || (h > 0)) {
        r.push(`<em>${h}</em>时`)
      }

      if (r.length || (m > 0)) {
        r.push(`<em>${m}</em>分`)
      }

      if (r.length || (s > 0)) {
        r.push(`<em>${s}</em>秒`)
      }

      self.last_time = r.join('');
      update.call(self,r.join('')); 
      setTimeout(function () {
        self.countdown(end, update, handle);
      },1000);
    }
  }
}


export default Timer;